"""
从一段文字中提取国内手机号
电信：133/153/180/181/189/177
联通：130/131/132/155/156/185/186/145/176
移动：134-139/150-152/157-159/182-184/187/188/147/178

Version: 0.1
Author: yuwl
Date：2024-4-08
"""

import re

def main():
    """
    1. (?<=\D)：这是一个正向后查找断言（positive lookbehind assertion）。它要求在匹配的手机号码前面必须是非数字字符（\D表示任何非数字字符）。这意味着手机号码前面不能直接跟着数字。
    2. (?=\D)：这是一个正向前查找断言（positive lookahead assertion）。它要求在匹配的手机号码后面必须是非数字字符。这意味着手机号码后面不能直接跟着数字。
    这个正则表达式匹配的是那些前后都由非数字字符（例如字母、标点符号或空格）包围的
    """
    pattern = re.compile(r'(?<=\D)1[34578]\d{9}(?=\D)')

    # 匹配任意字符前后的手机号
    # pattern = re.compile(r'1[34578]\d{9}')
    
    sentence = '''
    重要的事情说8130123456789遍，我的手机号是13512346789这个靓号，
    不是15600998765，也是110或119，王大锤的手机号才是15600998765。
    '''
    # 查找所有匹配并保存到一个列表中
    mylist = re.findall(pattern, sentence)
    print(mylist)
    print('---------华丽的分隔线---------')

    # 通过迭代器取出匹配对象并获取匹配的内容
    for temp in pattern.finditer(sentence):
        print(temp.group())
    print('---------华丽的分隔线---------')

    # 通过search函数指定搜索位置找出所有匹配
    m = pattern.search(sentence)
    while m:
        print(m.group())
        m = pattern.search(sentence, m.end())


if __name__ == '__main__':
    main()